package Day_0202.Spring;

/**
 * @author zxc
 * @date 2023/02/02 18:30
 **/
public class SpringAOP_AspectJAOP {
    public static void main(String[] args) {
        /**
         * SpringAOP和AspectJAOP之间的区别
         * ===》
         * 1.相互之间的差异
         * （1）Spring AOP是属于运行时增强，而AspectJ是编译时增强。
         * （2）Spring AOP基于代理（Proxying），而AspectJ基于字节码操作（Bytecode Manipulation）。
         * （3）Spring AOP已经集成了AspectJ，AspectJ应该算得上是Java生态系统中最完整的AOP框架。
         * （4）AspectJ相比于Spring AOP功能更加强大，但是Spring AOP相对来说更简单。
         * ===》
         * 如果我们的切面比较少，那么两者性能差异不大。但是，当切面太多的话，最好选择AspectJ，它比SpringAOP快很多。
         *
         * 2.在Spring AOP 中，关注点和横切关注点的区别是什么？
         * （1）关注点是应用中一个模块的行为，一个关注点可能会被定义成一个我们想实现的一个功能。
         *
         * （2）横切关注点是一个关注点，此关注点是整个应用都会使用的功能，并影响整个应用，比如日志，安全和数据传输，几乎应用的每个模块都需要的功能。
         *  因此这些都属于横切关注点。
         *
         * （3）连接点代表一个应用程序的某个位置，在这个位置我们可以插入一个AOP切面，它实际上是个应用程序执行SpringAOP的位置。
         *
         * （4）切入点是一个或一组连接点，通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。
         *
         * 3.通知是在方法执行前或执行后要做的动作，实际上是程序执行时要通过SpringAOP框架触发的代码段。
         * Spring切面可以应用五种类型的通知：
         * （1）before：
         *  前置通知，在一个方法执行前被调用。
         *
         * （2）after:
         *  在方法执行之后调用的通知，无论方法执行是否成功。
         *
         * （3）after-returning:
         *  仅当方法成功完成后执行的通知。
         *
         * （4）after-throwing:
         *  在方法抛出异常退出时执行的通知。
         *
         * （5）around:
         *  在方法执行之前和之后调用的通知。
         *
         */
    }
}
